//package org.walkerljl.commons.officesuite;
//
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.xssf.usermodel.XSSFCell;
//import org.apache.poi.xssf.usermodel.XSSFRow;
//import org.apache.poi.xssf.usermodel.XSSFSheet;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.walkerljl.commons.io.StreamUtils;
//import org.walkerljl.commons.util.ListUtils;
//import org.walkerljl.commons.util.StringPool;
//import org.walkerljl.commons.util.StringUtils;
//
//
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.text.DecimalFormat;
//import java.util.List;
//
///**
// *
// * ExcelUtils
// *
// * @author lijunlin
// */
//public class ExcelUtils {
//
//	/**
//	 * 读取Excel数据
//	 * @param ins
//	 * @return
//     */
//	public static List<List<Object>> read(InputStream ins) {
//		return ExcelUtils.read(ins, 0, 0, Integer.MAX_VALUE, true);
//	}
//
//	/**
//	 * 读取Excel数据
//	 * @param ins 数据流
//	 * @param sheetIndex 工作区索引
//	 * @param rowIndex 行索引
//	 * @param rowNumLimit 允许读取的行限制
//	 * @param isAllowNull 是否允许列为空
//	 * @return
//	 */
//	public static List<List<Object>> read(InputStream ins, int sheetIndex, int rowIndex, int rowNumLimit, boolean isAllowNull) {
//        try {
//        	XSSFWorkbook workbook = new XSSFWorkbook(ins);
//        	XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
//            if (sheet == null) {
//            	return null;
//            }
//            int rowCount = sheet.getLastRowNum();
//            if (rowCount > rowNumLimit) {
//            	throw new AppException("读取的Excel行数(" + rowCount+ ")不能超过:" + rowNumLimit);
//            }
//            int cellCount = 0;
//            if (rowIndex < rowCount) {
//            	cellCount = sheet.getRow(rowIndex).getLastCellNum();
//            }
//            List<List<Object>> rowValues = ListUtils.newArrayList();
//            for (int i = rowIndex + 1; i <= rowCount; i++) {
//            	XSSFRow row = sheet.getRow(i);
//                if (row == null) {
//                    continue;
//                }
//                List<Object> cellValues = ListUtils.newArrayList();
//                for (int j = 0; j < cellCount; j++) {
//                    XSSFCell cell = row.getCell(j);
//                    String value = getValueAsString(cell);
//                    if (isAllowNull || (!isAllowNull && StringUtils.isNotBlank(value))) {
//                    	cellValues.add(value);
//                    }
//                }
//                if (isAllowNull || (!isAllowNull && cellCount == cellValues.size())) {
//                	rowValues.add(cellValues);
//                }
//            }
//            return rowValues;
//        } catch (Exception e) {
//            throw new AppException("Fail to read excel:" + e.getMessage(), e);
//        } finally {
//        	StreamUtils.close(ins);
//        }
//    }
//
//	/**
//	 * 获取字符串列值
//	 * @param cell
//	 * @return
//	 */
//	private static String getValueAsString(XSSFCell cell) {
//		String returnValue = StringPool.EMPTY;
//		if (null != cell) {
//			switch (cell.getCellType()) {
//			case XSSFCell.CELL_TYPE_NUMERIC: // 数字
//				Double doubleValue = cell.getNumericCellValue();
//				String str = String.valueOf(doubleValue);
//				if (str.contains("E")) {
//					Double subStr = Double.parseDouble(str);
//					str = new DecimalFormat("#").format(subStr);
//				}
//				if (str.contains(".0")) {
//					str = str.replace(".0", "");
//				}
//				returnValue = str;
//				break;
//			case XSSFCell.CELL_TYPE_STRING: // 字符串
//				returnValue = cell.getStringCellValue();
//				break;
//			case XSSFCell.CELL_TYPE_BOOLEAN: // 布尔
//				Boolean booleanValue = cell.getBooleanCellValue();
//				returnValue = booleanValue.toString();
//				break;
//			case XSSFCell.CELL_TYPE_BLANK: // 空值
//				returnValue = "";
//				break;
//			case XSSFCell.CELL_TYPE_FORMULA: // 公式
//				returnValue = cell.getCellFormula();
//				break;
//			case XSSFCell.CELL_TYPE_ERROR: // 故障
//				returnValue = "";
//				break;
//			default:
//				throw new AppException("未知Cell类型");
//			}
//		}
//		return returnValue.trim();
//	}
//
//	/**
//	 * 输出Excel
//	 * @param out 输出流
//	 * @param title Excel title
//	 * @param heads Excel 头
//	 * @param data Excel数据
//	 */
//	public static void write(OutputStream out, String title, String[] heads, List<List<Object>> data) {
//		XSSFWorkbook wb = null;
//		try{
//			wb = new XSSFWorkbook();
//			Sheet sheet = wb.createSheet(title);
//			Row row = sheet.createRow((int) 0);
//			CellStyle style = wb.createCellStyle();
//			style.setAlignment(CellStyle.ALIGN_CENTER); // 创建一个居中格式
//			Font font = wb.createFont();
//			font.setFontName("黑体");
//			font.setBoldweight(Font.BOLDWEIGHT_BOLD);
//			font.setFontHeightInPoints((short) 10);//设置字体大小
//			style.setFont(font);
//			Cell cell = null;
//
//			if (heads == null) {
//				throw new AppException("Heads is null");
//			}
//			int headsLen = heads.length;
//			for (int i = 0; i < headsLen; i++) {
//				cell = row.createCell(i);
//				cell.setCellValue(heads[i]);
//				cell.setCellStyle(style);
//			}
//			for (int i = 0; i < data.size(); i++) {
//				int rowCursor = i + 1;
//				row = sheet.createRow(rowCursor);
//				List<Object> rowData = data.get(i);
//				for (int j = 0; j < headsLen; j++) {
//					Object cellValue = rowData.get(j);
//					row.createCell(j).setCellValue(StringUtils.valueOf(cellValue));
//				}
//			}
//		} catch (Exception e){
//		   throw new AppException("Fail to write excel file : " + e.getMessage(), e);
//		} finally {
//			try {
//				if (wb != null) {
//					wb.write(out);
//				}
//			} catch (Exception e2) {
//				//ignore
//			}
//			StreamUtils.close(out);
//		}
//	}
//}